var _ = require("lodash");
// _.differenceBy(array, [values], [iteratee=_.identity])
// array (Array): 要检查的数组。
// [values] (...Array): 排除的值。
// [iteratee=_.identity] (Array|Function|Object|string): iteratee 调用每个元素
// 和difference方法基本一致，但是功能更强大一些，他可以接收一个迭代器
// 首先使用迭代器分别迭代array 和 values中的每个元素，返回的值作为比较值
// 就是这个方法他不会直接比较原始的数据，而是首先使用迭代器，把两个参数的所有数据都做一次迭代
// 然后根据返回的新值组成的数组进行比较

// 可以根据这个特性，实现自己的对象组成的数组数据的去重，就是根据某一个元素来去重

let a = _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
// console.log(a);

let b = _.differenceBy([{ x: 2 }, { x: 1 }], [{ x: 1 }], "x");
// console.log(b);

let arr12 = [
  {
    name: "jack",
    age: 10,
  },
  {
    name: "jack2",
    age: 18,
  },
  {
    name: "tom",
    age: 28,
  },
];
let arr122 = [
  {
    name: "jack",
    age: 10,
  },
  {
    name: "jack3",
    age: 18,
  },
  {
    name: "tom2",
    age: 28,
  },
];
function myage(data) {
  return data.name;
}
// 下面两个写法，效果一样，第二种写法解释了这个迭代器的用法
// let c = _.differenceBy(arr12, arr122, "name");
let c = _.differenceBy(arr12, arr122, myage);
console.log(c);
